// Package layer_range_tree 7-116
// @Title layer_range_tree
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/16 14:17
// @Create  2021/9/16 14:17
package layer_range_tree

//Definition for a Node.
type Node struct {
	Val   int
	Left  *Node
	Right *Node
	Next  *Node
}

func connect(root *Node) *Node {
	if root == nil {
		return nil
	}
	mQ := []*Node{root}
	for len(mQ) > 0 {
		size := len(mQ)
		// 定义临时队列
		tQ := []*Node{}
		var tNode *Node // 定义前一个节点
		for i := 0; i < size; i++ {
			node := mQ[0]
			mQ = mQ[1:]
			tQ = append(tQ, node) // 把当前节点扔到临时队列中
			//如果node为空就表示node节点是这一行的第一个，
			//没有前一个节点指向他，否则就让前一个节点指向他
			if tNode != nil {
				tNode.Next = node
			}
			//然后再让当前节点成为前一个节点
			tNode = node
			if node.Left != nil {
				mQ = append(mQ, node.Left)
			}
			if node.Right != nil {
				mQ = append(mQ, node.Right)
			}
		}
	}
	return root
}
